package saei.persistencia.DAO;

import java.util.List;

import org.hibernate.Query;

import saei.bean.Cpu;
import saei.bean.ItemPlanRotacion;
import saei.bean.PlanRotacion;
import saei.bean.Usuario;

@SuppressWarnings({"rawtypes","unchecked"})
public class PlanRotacionDAO extends EntidadPersistenteDAO {
	
	public static List<PlanRotacion> buscarTodos() {
		Query query = getSession().createQuery("from PlanRotacion");
		
		return query.list();
	}
	
	public static PlanRotacion buscar(int numeroPlan) {
		Query query = getSession().createQuery("from PlanRotacion where numeroPlan = :numeroPlan");
		query.setInteger("numeroPlan", numeroPlan);
		List lista = query.list();
		
		return (PlanRotacion)(lista != null && lista.size() > 0 ? lista.get(0) : null);
	}
	
	public static boolean existePlanRotacion(int numeroPlan) {
		String fromQuery = " from PlanRotacion where numeroPlan = :numeroPlan";
		Query query = getSession().createQuery(fromQuery);
		query.setInteger("numeroPlan", numeroPlan);
		List lista = query.list();
		
		return lista.size() > 0;
	}
	
	public static ItemPlanRotacion buscarPlanRotacionActivoParaEquipo(Cpu equipo) {
		String fromQuery = " from ItemPlanRotacion ipr where ipr.equipoObsoleto = :equipoObsoleto " +
				" and ipr.nuevoEquipo is null";
		Query query = getSession().createQuery(fromQuery);
		query.setEntity("equipoObsoleto", equipo);
		List lista = query.list();
		
		return (ItemPlanRotacion) (lista != null && lista.size() > 0 ? lista.get(0) : null);
	}
	
	public static ItemPlanRotacion buscarPlanRotacionActivoParaUsuario(Usuario usuario) {
		String fromQuery = " from ItemPlanRotacion ipr where ipr.usuario = :usuario " +
				" and ipr.nuevoEquipo is null";
		Query query = getSession().createQuery(fromQuery);
		query.setEntity("usuario", usuario);
		List lista = query.list();
		
		return (ItemPlanRotacion) (lista != null && lista.size() > 0 ? lista.get(0) : null);
	}
	
	public static List<Usuario> buscarUsuariosConRotacionPendiente() {
		String fromQuery = "select distinct ipr.usuario from " +
				" ItemPlanRotacion ipr where ipr.nuevoEquipo is null ";
		Query query = getSession().createQuery(fromQuery);
		return query.list();
	}
}
